<HTML>
<HEAD>
<TITLE>
IndiceLineal.h
</TITLE>
</HEAD>
<BODY>
<PRE>
<font color="green">/*
 * IndiceLineal.h
 *
 * Indice simple lineal
 *
 *  Created on: 13/10/2009
 *      Author: andres
 */</font>

<font color="blue">#ifndef</font> INDICELINEAL_H_
<font color="blue">#define</font> INDICELINEAL_H_

<font color="blue">#include</font> <font color="maroon">"EstrategiaIndice.h"</font>
<font color="blue">#include</font> <font color="maroon">"../../classes/PrimaryKey.h"</font>
<font color="blue">#include</font> <font color="maroon">"../../classes/SecondaryKey.h"</font>
<font color="blue">#include</font> <font color="maroon">"DatoIndice.h"</font>
<font color="blue">#include</font> <font color="maroon">&#60;stdio.h&#62;</font>
<font color="blue">#include</font> <font color="maroon">&#60;string.h&#62;</font>
<font color="blue">#include</font> <font color="maroon">&#60;stdlib.h&#62;</font>
<font color="green">//#include "../Indice.inc.h"</font>

<font color="blue">using</font> <font color="blue">namespace</font> std;





<font color="blue">class</font> IndiceLineal<font color="black">:</font> <font color="blue">public</font> EstrategiaIndice
<font color="black">{</font>
<font color="blue">public</font><font color="black">:</font>

    <font color="green">/**
      * Constructor Indice Primario
      *
      * Crea un Indice primario a con el key indicado
      * tira IndexException si la key es NULL
      *
      * @author andres
      *
      * @param PrymaryKey* primary key del dato a indexar
      *
      */</font>
    IndiceLineal<font color="black">(</font>PrimaryKey<font color="black">*</font> primaryKey<font color="black">)</font> <font color="blue">throw</font><font color="black">(</font>IndexException<font color="black">)</font>;

    <font color="green">/**
      * Constructor Indice Secundario
      *
      * Crea un indice Secundario a partir del indice secundario dado
      * tira IndexException si las key o el indice es NULL
      *
      * @author andres
      *
      * @param SecundaryKey* key que se utiliza en el indice
      *
      * @param PrimaryKey* key para buscar en el indice primario
      *
      * @param EstrategiaIndice* Indice primario en el cual buscar
      *
      */</font>
    IndiceLineal<font color="black">(</font>PrimaryKey<font color="black">*</font> PrimaryKey, SecondaryKey<font color="black">*</font> secundaryKey, EstrategiaIndice<font color="black">*</font> indicePrimario<font color="black">)</font> <font color="blue">throw</font><font color="black">(</font>IndexException<font color="black">)</font>;

    virtual ~IndiceLineal<font color="black">(</font><font color="black">)</font>;


    <font color="green">/**
      * Cargar
      *
      * Carga el dato en el indice
      *
      * En caso de indice primario si el identificador esta repetido
      * tira IndexException
      *
      * @author andres
      *
      * @param void* dato serializado a agregar en el indice
      *
      * @param int id en que esta guardado el dato
      *
      */</font>
    <font color="blue">void</font> Cargar<font color="black">(</font><font color="blue">char</font><font color="black">*</font> datoSerializadoACargar, <font color="blue">unsigned</font> <font color="blue">int</font> id<font color="black">)</font> <font color="blue">throw</font><font color="black">(</font>IndexException<font color="black">)</font>;

    <font color="green">/**
      * Buscar
      *
      * Busca todos los datos indexados con la clave dada
      *
      * @author andres
      *
      * @param std::string clave que se busca en el indice
      *
      * @return std::vector&#60;int&#62; vector con los id de los resultados encontrados
      *
      */</font>
    std<font color="black">:</font><font color="black">:</font>vector<font color="black">&#60;</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">&#62;</font> Buscar<font color="black">(</font>std<font color="black">:</font><font color="black">:</font>string claveABuscar<font color="black">)</font>;

    <font color="green">/**
      * Listar
      *
      * Busca todos los datos contenidos entre las claves dadas
      *
      * @author andres
      *
      * @param claveInicial clave incial desde la que busca los datos
      *
      * @param claveFinal clave final hasta la que busca los datos
      *
      * @return std::vector&#60;int&#62; vector con todos los id de los datos encontrados
      *
      */</font>
    std<font color="black">:</font><font color="black">:</font>vector<font color="black">&#60;</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">&#62;</font> Listar<font color="black">(</font>std<font color="black">:</font><font color="black">:</font>string claveInicial, std<font color="black">:</font><font color="black">:</font>string claveFinal<font color="black">)</font>;

    <font color="green">/**
      * Modificar
      *
      * cambia los datos en el indice
      *
      * @author andres
      *
      * @param DatoSerializadoSinModificar datos serializados sin modificar
      *
      * @param DatosSerializadoModificado datos serializados modificados
      *
      * @param idModificado id de los datos modificados
      *
      */</font>
    <font color="blue">void</font> Modificar<font color="black">(</font><font color="blue">char</font><font color="black">*</font> DatoSerializadoSinModificar, <font color="blue">char</font><font color="black">*</font> DatoSerializadoModificado, <font color="blue">unsigned</font> <font color="blue">int</font> idModificado<font color="black">)</font>;

    <font color="green">/**
      * Eliminar
      *
      * Elimina el dato del indice
      *
      * @author andres
      *
      * @param DatoSeralizadoAEliminar
      *
      */</font>
    <font color="blue">void</font> Eliminar<font color="black">(</font><font color="blue">char</font><font color="black">*</font> DatoSerializadoAEliminar<font color="black">)</font>;

<font color="blue">private</font><font color="black">:</font>

    <font color="blue">void</font> Redimencionar<font color="black">(</font><font color="blue">int</font> nuevoTamanio<font color="black">)</font>;

    <font color="blue">int</font> GetTamanioBloque<font color="black">(</font><font color="black">)</font>;

    <font color="blue">char</font><font color="black">*</font> informacion;
    <font color="blue">int</font> CantidadBloquesReservados;
    <font color="blue">int</font> CantidadBloquesUsados;
    DatoIndice<font color="black">*</font> dato;
<font color="black">}</font>;

<font color="blue">#endif</font> <font color="green">/* IndiceLineal_H_ */</font>

</PRE>
</BODY>
</HTML>
